package com.util;

import cn.hutool.core.util.RandomUtil;
import com.model.TargetNode;

/**
 * <p>
 * 定位工具类
 * </p>
 *
 * @author : zb-z
 * @version : 1.0
 * @date : 2023/10/16 09:04
 */
public class PositionUtil {

    /**
     * 获取两点间距离
     * @param nodeA 节点A
     * @param nodeB 节点B
     * @return double
     */
    public static double getDistance(TargetNode nodeA, TargetNode nodeB) {
        return Math.sqrt(Math.pow(nodeA.getX() - nodeB.getX(), 2) + Math.pow(nodeA.getY() - nodeB.getY(), 2) + Math.pow(nodeA.getZ() - nodeB.getZ(), 2));
    }

    /**
     * 根据距离获取Rssi值
     * @param distance 距离
     * @return double
     */

    public static double getRssiByDistance(double distance) {
        // A, n在不同的硬件系统取值不一样
        // 噪声方差，由于Rssi测量时噪声非常大
        int A = -49;
        double n = 2.8;
        int Q = 5;
        return A - 10 * n * Math.log10(distance) + Math.sqrt(Q) * RandomUtil.randomInt(0,1);
    }

    /**
     * 根据Rssi值获取距离
     * @param rssi rssi
     * @return double
     */
    public static double getDistanceByRssi(double rssi) {
        // A, n在不同的硬件系统取值不一样
        int A = -49;
        double n = 2.8;
        return Math.pow(10, (A - rssi) / (10 * n));
    }


}
